package controller;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import model.City;
import model.ListItem;
import queries.QueryReader;

//import com.hp.hpl.jena.query.QueryExecution;
//import com.hp.hpl.jena.query.QueryExecutionFactory;
//import com.hp.hpl.jena.query.QuerySolution;
//import com.hp.hpl.jena.query.ResultSet;
import com.lynden.gmapsfx.javascript.object.LatLong;

public class QueryRunner 
{
	private static final String service = "http://localhost:3030/republique/query";

//	public static ArrayList<City> getCities()
//	{
//		ArrayList<City> result = new ArrayList<City>();
//		
//        String endpointsSparql = QueryReader.getQuery("getCities");
//
//        QueryExecution x = QueryExecutionFactory.sparqlService(service, endpointsSparql);
//        ResultSet results = x.execSelect();
//        
//        while (results.hasNext())
//        {
//        	QuerySolution qs = results.next();
//        	
//        	City c = new City(getString(qs, "cityName"), getString(qs, "partyName"),
//        					  getString(qs, "departmentName"), getString(qs, "regionName"), 
//        					  getString(qs, "statut"), getDouble(qs, "population"), 
//        			          new LatLong(getDouble(qs, "lat"), getDouble(qs, "lon")));
//        	
//        	result.add(c);
//        }
//        
//        x.close();
//        
//        return result;
//	}
//	
//	public static void getAbsentism(ArrayList<City> cities)
//	{
//        String endpointSparql = QueryReader.getQuery("getAbsentism");
//        String[] vars = new String[]{"abs_2001_1", "abs_2008_1", "abs_2001_2", "abs_2008_2"};
//        
//        getRates(cities, endpointSparql, vars);
//	}
//
//	public static void getExpressed(ArrayList<City> cities)
//	{
//		String endpointSparql = QueryReader.getQuery("getExpressed");
//		String[] vars = new String[]{"exp_2001_1", "exp_2008_1", "exp_2001_2", "exp_2008_2"};
//		
//		getRates(cities, endpointSparql, vars);
//	}
//	
//	public static void getRates(ArrayList<City> cities, String endpointSparq, String[] vars)
//	{
//        QueryExecution x = QueryExecutionFactory.sparqlService(service, endpointSparq);
//        ResultSet results = x.execSelect();
//        
//        while (results.hasNext())
//        {
//        	QuerySolution qs = results.next();
//        	
//        	for (City c : cities)
//        	{
//        		if ( !getString(qs, "communeName").equals(c.getName()) || !getString(qs, "departmentName").equals(c.getDepartment()))
//        			continue;
//        		
//        		for (String v : vars)
//        		{
//        			Double rate = getDouble(qs, v);
//        			
//        			if (rate!=null)
//        				c.putRate(v, rate);
//        		}
//        	}
//        }
//        
//        x.close();
//	}
//	
//	public static ArrayList<String> getDepartments()
//	{
//		return getNames("getDepartments");
//	}
//	
//	public static ArrayList<String> getRegions()
//	{
//		return getNames("getRegions");
//	}
//	
//	public static ArrayList<String> getParties()
//	{
//		return getNames("getParties");
//	}
//
//	public static ArrayList<String> getStatutes()
//	{
//		return getNames("getStatutes");
//	}
//	
//	public static ArrayList<String> getNames(String query)
//	{
//		ArrayList<String> result = new ArrayList<String>();
//		
//        String endpointsSparql = QueryReader.getQuery(query);
//
//        QueryExecution x = QueryExecutionFactory.sparqlService(service, endpointsSparql);
//        ResultSet results = x.execSelect();
//        
//        while (results.hasNext())
//        {
//        	QuerySolution qs = results.next();
//        	result.add(getString(qs, "name"));
//        }
//        
//        x.close();
//        
//        return result;
//	}
//	
//	public static Double getDouble(QuerySolution qs, String name)
//	{
//		if (qs.get(name)==null)
//			return null;
//		
//		String v = qs.get(name).toString();
//		v = v.replace("^^http://www.w3.org/2001/XMLSchema#double", "");
//		
//		return Double.parseDouble(v);
//	}
//	
//	public static String getString(QuerySolution qs, String name)
//	{
//		return qs.get(name).toString();
//	}
}
